package algo3.algothief.controlador;

import java.io.BufferedReader;
import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.xml.sax.SAXException;

import algo3.algothief.excepcion.CasoNoIniciadoException;
import algo3.algothief.excepcion.NombreDelJugadorNoDefinidoException;
import algo3.algothief.modelo.Juego;
import algo3.algothief.vista.VistaJuego;


public class ControladorPartida {

	private Juego juego;
	
	private VistaJuego vistaDelJuego;
	
//---------------------------------------------------------------------------------------------------------

	public ControladorPartida(Juego juegoActual, VistaJuego vista) {
		this.juego = juegoActual;
		
		this.vistaDelJuego = vista;
	}
	
//---------------------------------------------------------------------------------------------------------

	public void procesarEntradasParaGuardarUnaPartida(BufferedReader entradaDeTeclado) throws ParserConfigurationException, TransformerException, IOException, CasoNoIniciadoException {
		try {
			juego.guardarLaPartida();
			vistaDelJuego.graficarMensajeDePartidaGuardada(entradaDeTeclado);
		}
		catch (NombreDelJugadorNoDefinidoException excepcion) {
			// Nunca se llega a una situacion en la que no se haya definido
			// el nombre del jugador antes de guardar la partida.
			VistaJuego.graficarMensajeDeError(excepcion);
		}
	}
	
	
	
	public boolean procesarEntradasParaCargarUnaPartida(BufferedReader entradaDeTeclado) throws IOException, ParserConfigurationException, SAXException {
		vistaDelJuego.graficarMensajeParaObtenerElNombreDelJugadorCuyaPartidaFueGuardada();
		String nombreDelJugadorDeLaPartida = entradaDeTeclado.readLine();
		
		boolean seCargoLaPartida = juego.cargarUnaPartida(nombreDelJugadorDeLaPartida);
		
		if (!seCargoLaPartida) 
			vistaDelJuego.graficarMensajeDePartidaInexistente(nombreDelJugadorDeLaPartida, entradaDeTeclado);
		else 
			vistaDelJuego.graficarMensajeDePartidaCargada(entradaDeTeclado);
		
		return seCargoLaPartida;
	}
}
